package ar.com.uade.administradorsiembra.persistencia;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import ar.com.uade.administradorsiembra.common.ContextoTransaccional;
import ar.com.uade.administradorsiembra.modelo.Propietario;
import ar.com.uade.administradorsiembra.modelo.exceptions.TransaccionException;

public class PropietarioMapper extends Mapper<Propietario> {

	@Override
	public boolean guardarTodos(List<Propietario> instancias)
			throws TransaccionException {
		return false;

	}

	@Override
	public boolean guardar(Propietario instancia) throws TransaccionException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean modificar(Propietario instancia) throws TransaccionException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean borrar(Propietario instancia) throws TransaccionException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public List<Propietario> buscarTodos() {
		// TODO Auto-generated method stub
		this.logger.error("Busco todos los propietarios");

		List<Propietario> propietarios = new ArrayList<Propietario>();
		ContextoTransaccional contexto = null;

		try {
			contexto = super.administradorTransaccional.crearContexto(true);

			String queryPropietario = "SELECT dni, nombre, apellido FROM propietario";
			List<Object> parametrosPropietarios = new ArrayList<Object>();

			ResultSet rsPropietario;

			try {
				rsPropietario = this.executeQuery(queryPropietario,
						parametrosPropietarios, contexto.getConexionActual());

				while (rsPropietario.next()) {
					propietarios.add( 
							new Propietario( rsPropietario.getInt("dni"),
											rsPropietario.getString("nombre"),
											rsPropietario.getString("apellido")
									)
									);
					this.logger.info("Cereal encontrado: " + rsPropietario.getInt("dni"));
		
	
				}
			} catch (SQLException e) {
				this.logger.error("Error al buscar los Propietarios. "
						+ e.getMessage());
			}
		} catch (TransaccionException te) {
			this.logger.error("Error al buscar los propietarios. " + te.getMessage());
		} finally {
			contexto.liberarConexion();
		}

		return propietarios;
		
	}

	@Override
	public Propietario buscarPorId(Integer id) {
		// TODO Auto-generated method stub
		return null;
	}

	public Propietario buscarPorDni(Integer dniPropietario) {
		// TODO Auto-generated method stub
		this.logger.error("Busco el propietario con dni " + dniPropietario);

		Propietario propietario = null;
		ContextoTransaccional contexto = null;

		try {
			contexto = super.administradorTransaccional.crearContexto(true);

			String queryPropietario = "SELECT dni, nombre, apellido FROM propietario where dni = ?";
			List<Object> parametrosPropietarios = new ArrayList<Object>();

			parametrosPropietarios.add(dniPropietario);
			ResultSet rsPropietario;

			try {
				rsPropietario = this.executeQuery(queryPropietario,
						parametrosPropietarios, contexto.getConexionActual());

				if (rsPropietario.next()) {
					propietario = new Propietario(
							rsPropietario.getInt("dni"),
							rsPropietario.getString("nombre"),
							rsPropietario.getString("apellido"));

	
				}
			} catch (SQLException e) {
				this.logger.error("Error al buscar Propietario. "
						+ e.getMessage());
			}
		} catch (TransaccionException te) {
			this.logger.error("Error al buscar el propietario. " + te.getMessage());
		} finally {
			contexto.liberarConexion();
		}

		return propietario;

	}
}
